home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CD ROM Paradise Collection 4
/
CD ROM Paradise Collection 4 1995 Nov.iso
/
program
/
swags_z.zip
/
SCREEN.SWG
/
0030_Window Shadows.pas
< prev
next >
Wrap
Pascal/Delphi Source File
|
1993-08-27
|
2KB
|
66 lines
{
LOU DUCHEZ
> When I open the window, I want to give it a shadow, in C what you
>would do is switch the 2nd bit of each character.
Shadowing here. You'll need "Crt" for this to work:
}
procedure atshadow(x1, y1, x2, y2 : byte);
{ Makes a "shadow" to the right of and below a screen region, by setting the
foreground there to low intensity and the background to black. }
type
videolocation = record
videodata : char;
videoattribute : byte;
end;
var
xbegin, xend,
ybegin, yend,
xcnt, ycnt : byte;
videosegment : word;
monosystem : boolean;
vidptr : ^videolocation;
begin
{ Determine location of video memory. }
monosystem := (lastmode in [0, 2, 7]);
if monosystem then
videosegment := $b000
else
videosegment := $b800;
{ Determine the x coordinates where the shadowing begins and ends on the
lower edge. (Basically two spaces to the right of the box.) }
xbegin := x1 + 2;
xend := x2 + 2;
{ Determine the y coordinates where the shadowing begins and ends on the
right. (Basically one row below the box.) }
ybegin := y1 + 1;
yend := y2 + 1;
ycnt := ybegin;
while (ycnt <= yend) and (ycnt <= 25) do
begin
{ This loop goes through each row, putting in the shadows on the right and
bottom. First thing to check on each pass: if we're not below the region
to shadow, shade only to the right. Otherwise, start at the left. }
if ycnt > y2 then
xcnt := xbegin
else
xcnt := x2 + 1;
vidptr := ptr(videosegment, 2 * (80 * (ycnt - 1) + (xcnt - 1)));
while (xcnt <= xend) and (xcnt <= 80) do
begin
{ This loop does the appropriate shadowing for this row. }
vidptr^.videoattribute := vidptr^.videoattribute and $07; { SHADOW! }
xcnt := xcnt + 1;
inc(vidptr);
end;
ycnt := ycnt + 1;
end;
end;